#include <iostream>
#include <cstring>
using namespace std;

/*
	自己动手解决浅拷贝的问题--》实现了深拷贝  
*/

class Cat
{
public:
	//定义猫类的构造函数
	Cat(const char *_name,int _age)
	{
		//name申请堆空间
		name=new char[20];
		strcpy(name,_name);
		age=_age;
		cout<<"猫的构造函数"<<endl;
	}
	
	//自己写个拷贝构造函数
	Cat(const Cat &other)
	{
		cout<<"我自己写的拷贝构造函数被调用，实现深拷贝"<<endl;
		//给当前对象的name单独申请堆空间
		this->name=new char[20];
		strcpy(this->name,other.name);
		this->age=other.age;
	}
	
	~Cat()
	{
		delete []name;
	}
	
	//修改猫的属性
	void setAttr(const char *newname,int newage)
	{
		strcpy(name,newname);
		age=newage;
	}
	
	void show()
	{
		cout<<"name : "<<name<<"  age is: "<<age<<endl;
		//cout<<"name 地址: "<<(int *)name<<endl;
		//cout<<"age 地址: "<<&age<<endl;
	}

private:
	int age;
	char *name;
};

int main(int argc,char **argv)
{
	Cat c1("来福",5);
	//调用我自定义的拷贝构造函数
	Cat c2=c1;  
	              
	//验证结果
	c1.show();
	c2.show();
	
	cout<<"==============修改之后=============="<<endl;
	//打算修改c1的属性--》按道理来说，跟c2无关
	c1.setAttr("莱宝",6);
	c1.show();
	c2.show();

	return 0;	
}